package javachongkao.面向对象上.点;

import java.util.Objects;
import java.util.Scanner;
//7-28 点
//点是最简单的形，是几何图形最基本的组成部分。要求设计一个点类Point类，Point类包括：
//
//坐标成员变量 int x,int y
//成员变量x,y的setter gette方法，以及ToString方法
//带参无参构造方法
//重写hashcode和equals方法，判断两个点是否相同
//实现接口Comparable，可以比较两个点的大小，比较规则是若第一个点x大，则第一个点大，第一个点x小则第一个点小，若相同，比较y，根据y值判断大小。
//实现方法 int distance(Point p2),求两个点的距离（开平方根使用方法Math.sqrt()）
//测试类中main方法中，要求如下：
//通过键盘输入2个点坐标，创建2个点对象
//输出第一个点的信息（调用ToString方法），
//比较他们的大小，如果第一点大于等于第二个点，输出true否则输出false
//求这两个点的距离并输出。
//### 输入格式:
//请在这里写输入格式。例如：输入在一行中给出2个绝对值不超过1000的整数A和B。
//
//输出格式:
//输入两行，每行为一个点的坐标
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Point p1 = new Point(sc.nextInt(),sc.nextInt());
        Point p2 = new Point(sc.nextInt(),sc.nextInt());
        System.out.println(p1);
        if(p1.compareTo(p2)==1){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
        System.out.println(p1.distance(p2));
    }
}
class Point implements Comparable{
    private int x;
    private int y;

    public Point() {
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point [x="+x+", y="+y+"]";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }

    public int distance(Point p2){
        return (int)Math.sqrt((this.x-p2.getX())*(this.x-p2.getX())+(this.y-p2.getY())*(this.y-p2.getY()));
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    @Override
    public int compareTo(Object o) {
        Point p = (Point) o;
        if(this.x>p.getX()){
            return 1;
        }else if(this.x<p.getX()){
            return -1;
        }else{
            if(this.y>p.getY()){
                return 1;
            }else if(this.y<p.getY()){
                return -1;
            }else{
                return 1;
            }
        }
    }

}
